package models

import (
	"time"

	"gorm.io/gorm"
)

// Content 内容模型 - 对应Typecho的contents表
type Content struct {
	ID            uint           `gorm:"primaryKey;column:cid" json:"id"`
	Title         string         `gorm:"size:150;not null" json:"title"`
	Slug          string         `gorm:"size:150;uniqueIndex;not null" json:"slug"`
	Created       int64          `gorm:"not null;default:0" json:"created"`       // 创建时间戳
	Modified      int64          `gorm:"not null;default:0" json:"modified"`      // 修改时间戳
	Text          string         `gorm:"type:longtext" json:"text"`              // 内容
	Order         int            `gorm:"default:0" json:"order"`                  // 排序
	AuthorID      uint           `gorm:"column:authorId" json:"author_id"`        // 作者ID
	Template      string         `gorm:"size:32" json:"template"`                 // 自定义模板
	Type          string         `gorm:"size:16;not null" json:"type"`            // 内容类型，post或page
	Status        string         `gorm:"size:16;default:'publish'" json:"status"` // publish, draft, private
	Password      string         `gorm:"size:64" json:"-"`                        // 访问密码
	CommentsNum   int            `gorm:"column:commentsNum;default:0" json:"comments_num"` // 评论数量
	AllowComment  string         `gorm:"column:allowComment;size:1;default:'0'" json:"allow_comment"`  // 是否允许评论
	AllowPing     string         `gorm:"column:allowPing;size:1;default:'0'" json:"allow_ping"`      // 是否允许ping
	AllowFeed     string         `gorm:"column:allowFeed;size:1;default:'0'" json:"allow_feed"`      // 是否允许聚合
	Parent        int            `gorm:"default:0" json:"parent"`                 // 父级内容
	Views         int            `gorm:"default:0" json:"views"`                  // 浏览量
	
	// GORM关联
	User          User           `gorm:"foreignKey:AuthorID" json:"user"`
	Comments      []Comment      `gorm:"foreignKey:CID" json:"comments"`
	Metas         []Meta         `gorm:"polymorphic:Target" json:"metas"`
	
	// 辅助字段
	CreatedAt     time.Time      `gorm:"-" json:"created_at"`
	UpdatedAt     time.Time      `gorm:"-" json:"updated_at"`
	DeletedAt     gorm.DeletedAt `gorm:"index" json:"-"`
}

// TableName 设置表名
func (Content) TableName() string {
	return "contents"
}

// BeforeCreate 创建前钩子
func (c *Content) BeforeCreate(tx *gorm.DB) error {
	// 设置创建时间
	if c.Created == 0 {
		c.Created = time.Now().Unix()
	}
	c.Modified = time.Now().Unix()
	return nil
}

// AfterFind 查询后钩子
func (c *Content) AfterFind(tx *gorm.DB) error {
	// 将Unix时间戳转换为time.Time
	c.CreatedAt = time.Unix(c.Created, 0)
	c.UpdatedAt = time.Unix(c.Modified, 0)
	return nil
}

// BeforeSave 保存前钩子
func (c *Content) BeforeSave(tx *gorm.DB) error {
	// 更新修改时间
	c.Modified = time.Now().Unix()
	return nil
}